using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Collections;
using TestImport.Printen;
using TestImport.BeherenBestanden;

namespace TestImport.LeerlingenRetours
{
    public partial class Retour : Form
    {
        private bool scanning;
        private int vLeerlingID;
        private string vGroepCode;
        public enum AfhaalStatus {Update,Nieuw};
        private int vAantalLijnen = 0;
        private DataGridViewCellStyle dataGridViewCellStyle = new DataGridViewCellStyle();
        private bool selecteerAan;
        private bool isEindeSchooljaar;
        private List<int> leerlingBoekIDs;

        public Retour(bool isEindeSchooljaar)
        {
            InitializeComponent();
            this.BackColor = InstParameters.Default.schermkleur;
            this.isEindeSchooljaar = isEindeSchooljaar;
            //dataGridViewCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
            dataGridViewCellStyle.BackColor = System.Drawing.Color.LightGray;
            //dataGridViewCellStyle.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            dataGridViewCellStyle.ForeColor = System.Drawing.Color.Red;
            dataGridViewCellStyle.SelectionBackColor = System.Drawing.SystemColors.Highlight;
            dataGridViewCellStyle.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
            dataGridViewCellStyle.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
            selecteerAan = true;
           
        }

        private void Retour_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.RekeningLeerling' table. You can move, or remove it, as needed.
            //this.rekeningLeerlingTableAdapter.Fill(this.onsBoekenPakketDataSet.RekeningLeerling);
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek' table. You can move, or remove it, as needed.
            //this.leerlingBoekBestelling_BoekTableAdapter.Fill(this.onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek);
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.Groep' table. You can move, or remove it, as needed.
            this.groepTableAdapter.Fill(this.onsBoekenPakketDataSet.Groep);
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.Leerling' table. You can move, or remove it, as needed.
            this.leerlingTableAdapter.Fill(this.onsBoekenPakketDataSet.Leerling);
            try { cmbGroep_SelectedIndexChanged(null, null); }
            catch (Exception ex) {MessageBox.Show(ex.Message);}
            //try { cmbLeerling.SelectedIndex = 0; cmbLeerling_SelectedIndexChanged(null, null); updateBrowser(); }
            //catch (Exception) { ;}
            //Instellen startwaarden
            
            rbtHuurEnKoop.Checked = true;
            rbtVolledigeTerugbetaling.Checked = true;
            txtHuurPercent.Text = InstParameters.Default.vRetourHuurPercent.ToString();
            txtKoopPercent.Text = InstParameters.Default.vRetourKoopPercent.ToString();
            if (isEindeSchooljaar)
            {
                rbtHuur.Checked = InstParameters.Default.vRetourHuur;
                rbtKoop.Checked = InstParameters.Default.vRetourKoop;
                chkDrukRekening.Checked = InstParameters.Default.vRetourDrukRekening;
                chkMaakRekening.Checked = InstParameters.Default.vRetourMaakRekening;
                chkRekeningBetaald.Checked = InstParameters.Default.vRetourRekeningBetaald;
                nudAantalExemplaren.Value = InstParameters.Default.vRetourRekeningAantal;
                rbtGedeeltelijkeTerugbetaling.Checked = InstParameters.Default.vRetourGedeeltelijkeTerugbetaling;
                rbtGeenTerugbetaling.Checked = InstParameters.Default.vRetourGeenTerugbetaling;
                lbLeerling_SelectedIndexChanged(null, null);
            }
            if (!rbtGedeeltelijkeTerugbetaling.Checked) gpbPercentTerugbetaling.Visible = false;
            berekenTotalen();
        }

        private void cmbGroep_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                string vgroep = cmbGroep.SelectedValue.ToString();
                vGroepCode = vgroep;
                leerlingBindingSource1.RemoveFilter();
                leerlingBindingSource1.Filter = "groepCode = " + "'" + vgroep + "'";
                leerlingBindingSource1.Sort = "naam";
                try { lbLeerling.SelectedIndex = 0; lbLeerling_SelectedIndexChanged(null,null); }
                catch (Exception ex) {}
                
            }
            catch (Exception ex) { ;}
        }

       

        private void button1_Click(object sender, EventArgs e)
        {
            txtIsbn.Text = "9789030195412";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            txtIsbn.Text = "9789028925731";
        }

        private void button3_Click(object sender, EventArgs e)
        {
            txtIsbn.Text = "9789028929074";
        }
        private void wisBrowser()
        {
            while (onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows.Count > 0)
                onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows.RemoveAt(0);
        }    

        private void vullenViaBestellijstOfRekeningLijst(bool bestelLijst)
        {
            leerlingBoekBestelling_BoekTableAdapter.FillByAfgehaald(this.onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek, vLeerlingID);
            
            if (rbtHuur.Checked)  leerlingBoekBestelling_BoekBindingSource.Filter = "huurboek = true";
            if (rbtKoop.Checked) leerlingBoekBestelling_BoekBindingSource.Filter = "huurboek = false";
            if (rbtHuurEnKoop.Checked) leerlingBoekBestelling_BoekBindingSource.RemoveFilter();
            selecteerAan = true;
            if (selecteerAan)
            {
                for (int i = 0; i < leerlingBoekBestelling_BoekDataGridView.Rows.Count; i++)
                    leerlingBoekBestelling_BoekDataGridView.Rows[i].Cells["dgvSelecteer"].Value = true;
            }
            berekenTotalenInit();
            berekenTotalen();
           
        }
/*
        private void vullenViaBoeklijst()
        {
            wisBrowser();
                        
            string vIsbnNr = "";
            int vBoeklijstIemID = 0;
            DataTable dt2 = null;
            DataTable dt = boeklijst_BoekTableAdapter.GetDataByGroepCode(vGroepCode);
            DataRow dr = null;
            for (int i = 0;i< dt.Rows.Count;i++)
            {
                vIsbnNr = dt.Rows[i]["isbnNr"].ToString();
               
               vBoeklijstIemID = int.Parse(dt.Rows[i]["boeklijstItemID"].ToString());

                dt2 = leerlingBoekBestelling_BoekTableAdapter.GetDataByIsbnEnLeerlingID(vIsbnNr, vLeerlingID);
                if (dt2.Rows.Count > 0)
                {
                    dr = dt2.Rows[0];
                    voegToeAanLeerlingBoek(AfhaalStatus.Update, dr,vBoeklijstIemID);
                }
                else
                {
                    dr = dt.Rows[i];
                    voegToeAanLeerlingBoek(AfhaalStatus.Nieuw, dr,vBoeklijstIemID);
                }
            }
        }
*/
        public void setTxtIsbn(string vIsbnNr)
        {
            txtIsbn.Text = vIsbnNr;
        }

        private void txtIsbn_TextChanged(object sender, EventArgs e)
        {
            if (txtIsbn.Text.Length == 13)
            {
                if (chkNietOpNaam.Checked==false)
                {
                    try
                    {
                        int index = leerlingBoekBestelling_BoekBindingSource.Find("isbnNr",txtIsbn.Text);
                        if (index >= 0)
                        {
                            leerlingBoekBestelling_BoekBindingSource.Position = index;
                            leerlingBoekBestelling_BoekDataGridView.CurrentRow.Cells["dgvSelecteer"].Value = true;
                            berekenTotalen();
                        }
                    }
                    catch (Exception){;}
                }
                else
                {
                    vLeerlingID = -1;
                    bool nietToevoegen = false;
                    int vLeerlingBoekID = 0;
                    bool vHuurboek = false;
                    int vStatus = -1;
                    DataTable dt = leerlingBoekBestelling_BoekTableAdapter.GetDataByIsbnEnLeerlingID(txtIsbn.Text,vLeerlingID);
                    bool gevondenInLeerlingBoek =  dt.Rows.Count  >=1;
                    if (!gevondenInLeerlingBoek)
                        lblFoutMelding.Text = "Dit boek is nooit geregistreerd als afgehaald!!";
                    else
                    {
                        for (int i =0;i < dt.Rows.Count;i++)
                        {
                            vHuurboek = false;
                            try { vHuurboek = bool.Parse(dt.Rows[i]["huurboek"].ToString()); }
                            catch (Exception) { };
                            if (!vHuurboek && rbtHuur.Checked)
                            {
                                lblFoutMelding.Text = "Dit boek is geen huurboek!!"; nietToevoegen = true;
                            }
                            if (vHuurboek && rbtKoop.Checked)
                            {
                                lblFoutMelding.Text = "Dit boek is geen koopboek!!"; nietToevoegen = true;
                            }
                            if (!nietToevoegen)
                            {
                                vStatus = int.Parse(dt.Rows[i]["status"].ToString());
                                vLeerlingBoekID = int.Parse(dt.Rows[i]["leerlingBoekID"].ToString());
                                if (!leerlingBoekIDs.Contains(vLeerlingBoekID) && vStatus != 3)
                                {
                                    lblFoutMelding.Text = "";
                                    leerlingBoekIDs.Add(vLeerlingBoekID);
                                    int vBoeklijstItemID = int.Parse(dt.Rows[i]["boeklijstItemID"].ToString());
                                    voegToeAanLeerlingBoek(AfhaalStatus.Update, dt.Rows[i], vBoeklijstItemID);
                                    break;
                                }
                                else
                                {
                                    lblFoutMelding.Text = "Dit boek is nooit geregistreerd als afgehaald!!";
                                }
                            }
                        }
                    }
                   
                }
                txtIsbn.Text = "";
            }   
        }

        private bool isDubbelBoek(string vIsbnNr)
        {
            return leerlingBoekBestelling_BoekBindingSource.Find("isbnNr", vIsbnNr) > -1;
        }

        public void voegToeAanLeerlingBoek(AfhaalStatus vStatus, DataRow dr, int vBoeklijstItemID)
        {
            int index = 0;
            int vRekeningID = -1;
            int vvStatus = 0;
            int vBoekID = int.Parse(dr["boekID"].ToString());
            DateTime vDatumBestelling = DateTime.MinValue;
            DateTime vDatumAfhaling = DateTime.MinValue; 
            string vTitel = dr["Titel"].ToString();
            string vCatCode = dr["categorieCode"].ToString();
            string vUitgeverCode = dr["uitgeverCode"].ToString();
            string vIsnbNr = dr["isbnNr"].ToString();
            decimal vHuurPrijs = 0;
            try { vHuurPrijs = decimal.Parse(dr["huurPrijs"].ToString()); }
            catch (Exception ex) { ;}
            decimal vSchoolPrijs = 0;
            try { vSchoolPrijs = decimal.Parse(dr["schoolPrijs"].ToString()); }
            catch (Exception ex) { ;}
            int vLeerlingBoekID = -1;
            bool vHuur = false;
            //if (rbtHuur.Checked) vHuur = true;
            try { if (bool.Parse(dr["huurboek"].ToString())) vHuur = true; }
            catch (Exception) { ;}
            if (vStatus == AfhaalStatus.Update)
            {
                try { vRekeningID = int.Parse(dr["rekeningID"].ToString()); }
                catch (Exception) { ;}
                vvStatus = int.Parse(dr["status"].ToString());
                vLeerlingBoekID =  int.Parse(dr["leerlingBoekID"].ToString());
                vHuur = bool.Parse(dr["huurboek"].ToString());
                try { vDatumBestelling = DateTime.Parse(dr["datumBestelling"].ToString()); }
                catch (Exception) { ;}
                try { vDatumAfhaling = DateTime.Parse(dr["datumAfhaling"].ToString()); }
                catch (Exception) { ;}
            }
            bool toevoegen = true;
           // if (vStatus == AfhaalStatus.Update && chkFilterNogAfTeHalen.Checked && vDatumAfhaling != DateTime.MinValue) toevoegen = false;
            if (toevoegen)
            {
               // if (chkNietOpNaam.Checked) vLeerlingID = -1;
                onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.AddLeerlingBoekBestelling_BoekRow(vBoekID,
                    "", vCatCode, vDatumBestelling, vDatumAfhaling, DateTime.Now, DateTime.Now, vvStatus, vLeerlingID, 0, vLeerlingBoekID, vHuur, vSchoolPrijs, vHuurPrijs, vBoeklijstItemID, vRekeningID, 0, vIsnbNr, "", vUitgeverCode, vTitel, "", false, false, 0, 0, 0, "", "");
                index = onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows.Count - 1;

                if (onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows[index]["datumBestelling"].ToString().Equals(DateTime.MinValue.ToString()))
                    onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows[index]["datumBestelling"] = DBNull.Value;
                if (onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows[index]["datumAfhaling"].ToString().Equals(DateTime.MinValue.ToString()))
                    onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows[index]["datumAfhaling"] = DBNull.Value;
                onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows[index]["datumAnnulatie"] = DBNull.Value;
                onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows[index]["datumRetour"] = DBNull.Value;
                onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows[index]["rekeningID"] = DBNull.Value;
                if (vRekeningID != -1)
                    leerlingBoekBestelling_BoekDataGridView.Rows[index].Cells["dgvOpRekening"].Value = true;
                leerlingBoekBestelling_BoekDataGridView.Rows[index].Cells["dgvSelecteer"].Value = true;
                if (int.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows[index]["status"].ToString())==3)
                {
                    leerlingBoekBestelling_BoekDataGridView.Rows[index].DefaultCellStyle = dataGridViewCellStyle;
                    leerlingBoekBestelling_BoekDataGridView.Rows[index].ReadOnly = true;
                    leerlingBoekBestelling_BoekDataGridView.Rows[index].Cells["dgvSelecteer"].Value = false;
                }
               
                berekenTotalen();
            }
           
        }

        private void berekenTotalenInit()
        {
            DataView dv = rekeningLeerlingBindingSource.List as DataView;
            int vAantalHuurTeretour = 0;
            int vAantalKoopTeretour = 0;
            int vRekeningID = 0;
            int vRekeningIndex = -1;
            decimal vTotaal = 0;
            DataRowView dr = null;
            for (int j = 0; j < leerlingBoekBestelling_BoekDataGridView.Rows.Count; j++)
            {
                dr = leerlingBoekBestelling_BoekDataGridView.Rows[j].DataBoundItem as DataRowView;
                try
                {
                    if (bool.Parse(dr["huurboek"].ToString()))
                        vAantalHuurTeretour++;
                    //vTotaal += decimal.Parse(dr["huurPrijs"].ToString());
                    else
                        vAantalKoopTeretour++;
                    //vTotaal += decimal.Parse(dr["schoolPrijs"].ToString());

                }
                catch (Exception) { ;}

                try
                {
                    vRekeningID = int.Parse(dr["rekeningID"].ToString());
                    vRekeningIndex = rekeningLeerlingBindingSource.Find("rekeningID",vRekeningID);
                    if (decimal.Parse(dv[vRekeningIndex]["betaald"].ToString()) > 0)
                    {
                        if (bool.Parse(dr["huurboek"].ToString()))
                            vTotaal += decimal.Parse(dr["huurPrijs"].ToString());
                        else
                            vTotaal += decimal.Parse(dr["schoolPrijs"].ToString());
                    }
                    
                }
                catch (Exception) {};
            }
            txtTeRetournerenHuur.Text = vAantalHuurTeretour.ToString();
            txtTeRetournerenKoop.Text = vAantalKoopTeretour.ToString();
            txtBetaald.Text = MijnLib.zetDecimalenOp2(vTotaal.ToString());
        }

        private void berekenTotalen()
        {
            int vAantalHuurRetour = 0;
            int vAantalKoopRetour = 0;
            decimal vTerug = 0;

            DataRowView dr = null;
            for (int j =0; j< leerlingBoekBestelling_BoekDataGridView.Rows.Count; j++)
            {
                dr = leerlingBoekBestelling_BoekDataGridView.Rows[j].DataBoundItem as DataRowView;
                try
                {
                    if (bool.Parse(leerlingBoekBestelling_BoekDataGridView.Rows[j].Cells["dgvSelecteer"].Value.ToString()))
                    {
                        if (bool.Parse(dr["huurboek"].ToString()))
                        {    
                            vAantalHuurRetour++;
                            if (rbtVolledigeTerugbetaling.Checked)
                            {
                                vTerug += decimal.Parse(dr["huurPrijs"].ToString());
                            }
                            else
                            {
                                if (rbtGedeeltelijkeTerugbetaling.Checked)
                                {
                                    decimal vPercent = decimal.Parse(txtHuurPercent.Text)/100;
                                    vTerug += Math.Round(decimal.Parse(dr["huurPrijs"].ToString()) * vPercent,2);
                                }
                            }
                        }
                        else
                        {
                            vAantalKoopRetour++;
                            if (rbtVolledigeTerugbetaling.Checked)
                            {
                                vTerug += decimal.Parse(dr["schoolPrijs"].ToString());
                            }
                            else
                            {
                                if (rbtGedeeltelijkeTerugbetaling.Checked)
                                {
                                    decimal vPercent = decimal.Parse(txtKoopPercent.Text) / 100;
                                    vTerug += Math.Round(decimal.Parse(dr["schoolPrijs"].ToString()) * vPercent,2);
                                }
                            }
                        }
                    }
                }
                catch (Exception) { ;}
            }
            txtGeretourneerdHuur.Text = vAantalHuurRetour.ToString();
            txtGeretourneerdKoop.Text = vAantalKoopRetour.ToString();
            txtTerugTeBetalen.Text = MijnLib.zetDecimalenOp2(vTerug.ToString());
    
        }

        private void cmbLeerling_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                vLeerlingID = int.Parse(cmbLeerling.SelectedValue.ToString());
                DataTable dtLl = leerlingTableAdapter.GetDataByLeerlingID(vLeerlingID);
                if (dtLl.Rows.Count > 0)
                {
                    vGroepCode = dtLl.Rows[0]["groepCode"].ToString();
                    cmbGroep.SelectedValue = vGroepCode;
                    lbLeerling.SelectedValue = cmbLeerling.SelectedValue.ToString();
                }
                updateLeerlingInfo();
            }
            catch (Exception) { ;}

        }

        private void updateLeerlingInfo()
        {
            try
            {
                DataTable ll = leerlingTableAdapter.GetDataByLeerlingID(vLeerlingID);
                btnRegistreer.Enabled = true;
                lblLeerlingInfo.Text = ll.Rows[0]["naam"].ToString().ToUpper()+" ("+ll.Rows[0]["straat"]+" "+ll.Rows[0]["gemeente"]+") GROEP:"+ll.Rows[0]["groepCode"];
                btnRegistreer.Text = "Registreer retour voor " + ll.Rows[0]["naam"].ToString().ToUpper();
                rekeningLeerlingTableAdapter.FillByLeerlingID(this.onsBoekenPakketDataSet.RekeningLeerling,vLeerlingID);
            }
            catch (Exception)
            {
                lblLeerlingInfo.Text = "";
                btnRegistreer.Text = "Registreer afhaling voor  ???";
                btnRegistreer.Enabled = false;
            }
           
        }

        private void lbLeerling_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                vLeerlingID = int.Parse(lbLeerling.SelectedValue.ToString());
                DataTable dtLl = leerlingTableAdapter.GetDataByLeerlingID(vLeerlingID);
                if (dtLl.Rows.Count > 0)
                    vGroepCode = dtLl.Rows[0]["groepCode"].ToString();
                updateLeerlingInfo();
                updateBrowser();
            }
            catch (Exception ex)
            {
                lblLeerlingInfo.Text = "";
                btnRegistreer.Text = "Registreer afhaling voor  ???";
                btnRegistreer.Enabled = false;
            }
        }

        private void updateBrowser()
        {
            vullenViaBestellijstOfRekeningLijst(true);
            
        }


        private void leerlingBoekBestelling_BoekDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            leerlingBoekBestelling_BoekDataGridView.EndEdit();    
            if (leerlingBoekBestelling_BoekDataGridView.Columns[e.ColumnIndex].Name.Equals("dgvSelecteer"))
                 berekenTotalen();
        }

        
        private void registreerRetourInLoopVanSchooljaar()
        {
            // op naam
            // indien retour tijdens schooljaar ALTIJD rekeningretour indien er betaling is gebeurt
            
            List <int> rekeningIDs = new List <int>();
            List<int> rekeningIDsBetaald = new List<int>();
            DataRowView dr = null; 
            int aantalLijnenOpRekeningen = 0;
            int aantalRekeningenBetaald = 0;
            bool opRekening = false;
            bool isBetaald = false;
            decimal vBetaald = 0;
            decimal vTerugTeBetalen = 0;
          
            int vRekeningID = 0;
            int vRekeningRetourID = int.Parse(rekeningTableAdapter.getMaxRekeningID().ToString()) + 1;
            int vLeerlingBoekID = 0;
            for (int i = 0; i < leerlingBoekBestelling_BoekDataGridView.Rows.Count; i++)
            {
                 if (bool.Parse(leerlingBoekBestelling_BoekDataGridView.Rows[i].Cells["dgvSelecteer"].Value.ToString()))
                 {
                         opRekening = false;
                         isBetaald = false;
                         dr = leerlingBoekBestelling_BoekDataGridView.Rows[i].DataBoundItem as DataRowView;
                         try
                         {
                             vRekeningID = int.Parse(dr["rekeningID"].ToString());
                             opRekening = true;
                             if (!rekeningIDs.Contains(vRekeningID)) rekeningIDs.Add(vRekeningID);
                             aantalLijnenOpRekeningen++;

                             vBetaald = decimal.Parse(rekeningTableAdapter.GetDataByRekeningID(vRekeningID).Rows[0]["betaald"].ToString());
                             if (vBetaald > 0)
                             {
                                 aantalRekeningenBetaald++;
                                 isBetaald = true;
                                 if (!rekeningIDsBetaald.Contains(vRekeningID)) rekeningIDsBetaald.Add(vRekeningID);
                             }
                         }
                         catch (Exception) { ;}
                         vLeerlingBoekID = int.Parse(dr["leerlingBoekID"].ToString());
                         Text += "ID " + vLeerlingBoekID;
                                              
                         leerlingBoek_Leerling_BoekTableAdapter.UpdateStatus(3, vLeerlingBoekID);
                         leerlingBoek_Leerling_BoekTableAdapter.UpdateDatumRetour(DateTime.Now, vLeerlingBoekID);
                         if (opRekening || chkNietOpNaam.Checked)
                         {
                             //bij retour niet op naam ALTIJD een rekening retour
                             if (isBetaald || chkNietOpNaam.Checked)
                             {
                                 leerlingBoek_Leerling_BoekTableAdapter.UpdateRekeningRetourID(vRekeningRetourID, vLeerlingBoekID);
                             }
                             else
                             {
                                 leerlingBoek_Leerling_BoekTableAdapter.UpdateRekeningOpNull(vLeerlingBoekID);
                             }
                          }//end-if op rekening
                 }//end-if selecteer
            }//end-for

            //update rekening (niet betaalde rekeningen annuleren)
            //annulatie KAN NIET voor retour niet op naam 
            if (!chkNietOpNaam.Checked )
            {
                foreach (int vvRekeningID in rekeningIDs)
                {
                    if (!rekeningIDsBetaald.Contains(vvRekeningID))
                    {
                        rekeningTableAdapter.UpdateAnnuleerRekening(vvRekeningID);
                    }
                }
            }    
            vTerugTeBetalen = decimal.Parse(txtTerugTeBetalen.Text);
            if (vTerugTeBetalen > 0)
            {
                if (rbtGedeeltelijkeTerugbetaling.Checked)
                {
                    string tekst = null;
                    try
                    {
                        tekst += "Percentage terugbetaling op koopboeken: " + decimal.Parse(txtKoopPercent.Text) +" %"+ Environment.NewLine;
                    }
                    catch (Exception) { }
                    try
                    {
                        tekst += "Percentage terugbetaling op huurboeken: " + decimal.Parse(txtHuurPercent.Text) +" %"+ Environment.NewLine;
                    }
                    catch (Exception) { }
                    if (tekst != null) txtRekeningOpmerking.Text = tekst + txtRekeningOpmerking.Text;
                }

                if (chkRekeningBetaald.Checked)
                {
                    rekeningTableAdapter.Insert(DateTime.Now, vTerugTeBetalen * (-1), txtRekeningOpmerking.Text, 0, vTerugTeBetalen * (-1), vLeerlingID);
                }
                else
                {
                    rekeningTableAdapter.Insert(DateTime.Now, vTerugTeBetalen * (-1), txtRekeningOpmerking.Text, 0, 0, vLeerlingID);
                }
             }
             if (chkDrukRekening.Checked && aantalLijnenOpRekeningen > 0)
             {
                 PrintenRekening p = new PrintenRekening(vRekeningRetourID, txtRekeningOpmerking.Text, DateTime.Now, int.Parse(nudAantalExemplaren.Value.ToString()), true);
                 MessageBox.Show(p.printRekeningen());
             }
             wisBrowser();
         }

        private void registreerRetourEindeSchooljaar()
        {
            berekenTotalen();
            List<int> rekeningIDs = new List<int>();
            List<int> rekeningIDsBetaald = new List<int>();
            DataRowView dr = null;
            int aantalLijnenOpRekeningen = 0;
            int aantalRekeningenBetaald = 0;
            bool opRekening = false;
            bool isBetaald = false;
            decimal vBetaald = 0;
            decimal vTerugTeBetalen = 0;

            int vRekeningID = 0;
            int vRekeningRetourID = int.Parse(rekeningTableAdapter.getMaxRekeningID().ToString()) + 1;
            int vLeerlingBoekID = 0;
            vTerugTeBetalen = decimal.Parse(txtTerugTeBetalen.Text);
            for (int i = 0; i < leerlingBoekBestelling_BoekDataGridView.Rows.Count; i++)
            {
                if (bool.Parse(leerlingBoekBestelling_BoekDataGridView.Rows[i].Cells["dgvSelecteer"].Value.ToString()))
                {
                    opRekening = false;
                    isBetaald = false;
                    dr = leerlingBoekBestelling_BoekDataGridView.Rows[i].DataBoundItem as DataRowView;
                   
                    vLeerlingBoekID = int.Parse(dr["leerlingBoekID"].ToString());
                    leerlingBoek_Leerling_BoekTableAdapter.UpdateStatus(3, vLeerlingBoekID);
                    leerlingBoek_Leerling_BoekTableAdapter.UpdateDatumRetour(DateTime.Now, vLeerlingBoekID);
                    if (vTerugTeBetalen > 0)
                    {
                        leerlingBoek_Leerling_BoekTableAdapter.UpdateRekeningRetourID(vRekeningRetourID, vLeerlingBoekID);
                    }//end-if op rekening
                }//end-if selecteer
            }//end-for

           
            if (vTerugTeBetalen > 0)
            {
                if (rbtGedeeltelijkeTerugbetaling.Checked)
                {
                    string tekst = null;
                    try
                    {
                        tekst += "Percentage terugbetaling op koopboeken: " + decimal.Parse(txtKoopPercent.Text) + " %" + Environment.NewLine;
                    }
                    catch (Exception) { }
                    try
                    {
                        tekst += "Percentage terugbetaling op huurboeken: " + decimal.Parse(txtHuurPercent.Text) + " %" + Environment.NewLine;
                    }
                    catch (Exception) { }
                    if (tekst != null) txtRekeningOpmerking.Text = tekst + txtRekeningOpmerking.Text;
                }

                if (chkRekeningBetaald.Checked)
                {
                    rekeningTableAdapter.Insert(DateTime.Now, vTerugTeBetalen * (-1), txtRekeningOpmerking.Text, 0, vTerugTeBetalen * (-1), vLeerlingID);
                }
                else
                {
                    rekeningTableAdapter.Insert(DateTime.Now, vTerugTeBetalen * (-1), txtRekeningOpmerking.Text, 0, 0, vLeerlingID);
                }
            }
            if (chkDrukRekening.Checked && aantalLijnenOpRekeningen > 0)
            {
                PrintenRekening p = new PrintenRekening(vRekeningRetourID, txtRekeningOpmerking.Text, DateTime.Now, int.Parse(nudAantalExemplaren.Value.ToString()), true);
                MessageBox.Show(p.printRekeningen());
            }
            wisBrowser();
        }
        

        private void btnRegistreer_Click(object sender, EventArgs e)
        {
            leerlingBoekIDs = new List<int>();
            if (isEindeSchooljaar) registreerRetourEindeSchooljaar();
            else registreerRetourInLoopVanSchooljaar();
        }   

        private void btnAanUit_Click(object sender, EventArgs e)
        {
            selecteerAan = !selecteerAan;
            for (int i = 0; i < leerlingBoekBestelling_BoekDataGridView.Rows.Count; i++)
               leerlingBoekBestelling_BoekDataGridView.Rows[i].Cells["dgvSelecteer"].Value = selecteerAan;
            berekenTotalenInit();
            berekenTotalen();
        }

        private void rbtHuur_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtHuur.Checked) { leerlingBoekBestelling_BoekBindingSource.Filter = "huurboek = true"; berekenTotalenInit(); berekenTotalen(); selecteerAan = false; }
        }

        private void rbtKoop_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtKoop.Checked) { leerlingBoekBestelling_BoekBindingSource.Filter = "huurboek = false"; berekenTotalenInit(); berekenTotalen(); selecteerAan = false; }
           
        }

        private void rbtHuurEnKoop_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtHuurEnKoop.Checked) 
            { 
                leerlingBoekBestelling_BoekBindingSource.RemoveFilter(); berekenTotalenInit(); berekenTotalen(); selecteerAan = false;
                leerlingBoekIDs = new List<int>();
            }
          
        }

        private void chkNietOpNaam_CheckedChanged(object sender, EventArgs e)
        {
            wisBrowser();
            if (chkNietOpNaam.Checked)
            {
                pnlLeerling.Visible = false;
                lblLeerlingInfo.Text = "Retour NIET op naam";
                btnRegistreer.Text = "Registreer retour voor NAAMLOOS";
                vGroepCode = "???";
               
            }
            else
            {
                pnlLeerling.Visible = true;
              
            }
        }

        private void rbtVolledigeTerugbetaling_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtVolledigeTerugbetaling.Checked) berekenTotalen();
        }

        private void rbtGeenTerugbetaling_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtGeenTerugbetaling.Checked) berekenTotalen();
        }

      
        private void rbtGedeeltelijkeTerugbetaling_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtGedeeltelijkeTerugbetaling.Checked)
            {
                gpbPercentTerugbetaling.Visible = true;
                berekenTotalen();
            }
            else
                gpbPercentTerugbetaling.Visible = false;
        }

        private void btnOpmerkingRetour_Click(object sender, EventArgs e)
        {
            txtRekeningOpmerking.Text = InstParameters.Default.vPrintOpmerkingRetour;
        }

        private void txtHuurPercent_TextChanged(object sender, EventArgs e)
        {
            berekenTotalen();
        }

        private void txtKoopPercent_TextChanged(object sender, EventArgs e)
        {
            berekenTotalen();
        }       
             
    }
}